package com.material.c2c.util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 汉子拼音工具类
 *
 * @author raozhidan（rao.zhidan@sccaptain.com.cn）
 * @create 2018/1/16
 */
public class PinyinUtil {
  public static String getFirstLettersUp(String ChineseLanguage) {
    return getFirstLetters(ChineseLanguage, HanyuPinyinCaseType.UPPERCASE);
  }

  public static String getFirstLettersLo(String ChineseLanguage) {
    return getFirstLetters(ChineseLanguage, HanyuPinyinCaseType.LOWERCASE);
  }

  public static String getFirstLetters(String ChineseLanguage, HanyuPinyinCaseType caseType) {
    char[] cl_chars = ChineseLanguage.trim().toCharArray();
    String hanyupinyin = "";
    HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    defaultFormat.setCaseType(caseType);// 输出拼音全部大写
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
    try {
      for (int i = 0; i < cl_chars.length; i++) {
        String str = String.valueOf(cl_chars[i]);
        if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
          hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1);
        } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
          hanyupinyin += cl_chars[i];
        } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
          hanyupinyin += cl_chars[i];
        } else {// 否则不转换
          hanyupinyin += cl_chars[i];//如果是标点符号的话，带着
        }
      }
    } catch (BadHanyuPinyinOutputFormatCombination e) {
      System.out.println("字符不能转成汉语拼音");
    }
    return hanyupinyin;
  }

  public static String getPinyinString(String ChineseLanguage) {
    char[] cl_chars = ChineseLanguage.trim().toCharArray();
    String hanyupinyin = "";
    HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部大写
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
    try {
      for (int i = 0; i < cl_chars.length; i++) {
        String str = String.valueOf(cl_chars[i]);
        if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
          hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(
            cl_chars[i], defaultFormat)[0];
        } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
          hanyupinyin += cl_chars[i];
        } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母

          hanyupinyin += cl_chars[i];
        } else {// 否则不转换
        }
      }
    } catch (BadHanyuPinyinOutputFormatCombination e) {
      System.out.println("字符不能转成汉语拼音");
    }
    return hanyupinyin;
  }

  /**
   * 取第一个汉字的第一个字符
   *
   * @return String
   * @throws
   * @Title: getFirstLetter
   * @Description: TODO
   */
  public static String getFirstLetter(String ChineseLanguage) {
    char[] cl_chars = ChineseLanguage.trim().toCharArray();
    String hanyupinyin = "";
    HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 输出拼音全部大写
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
    try {
      String str = String.valueOf(cl_chars[0]);
      if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
        hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(
          cl_chars[0], defaultFormat)[0].substring(0, 1);
        ;
      } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
        hanyupinyin += cl_chars[0];
      } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母

        hanyupinyin += cl_chars[0];
      } else {// 否则不转换

      }
    } catch (BadHanyuPinyinOutputFormatCombination e) {
      System.out.println("字符不能转成汉语拼音");
    }
    return hanyupinyin;
  }

  public static void main(String[] args) {

  }


  /**
   * 转汉字为驼峰命名字符串
   *
   * @param chinese
   * @return
   */
  public static String convertChineseToCamel(String chinese) {
    String[] b = chinese.split("_");
    StringBuffer stringBuffer = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
      String c = getFirstLettersLo(b[i]);
      char[] charArray = c.toCharArray();
      if (i != 0) {
        charArray[0] -= 32;
      }
      stringBuffer.append(String.valueOf(charArray));
    }
    return stringBuffer.toString();
  }

  /**
   * 将文字转为汉语拼音
   *
   * @param chineseLanguage 要转成拼音的中文
   */
  public String toHanyuPinyin(String chineseLanguage) {
    char[] cl_chars = chineseLanguage.trim().toCharArray();
    String hanyupinyin = "";
    HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部小写
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
    defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
    try {
      for (int i = 0; i < cl_chars.length; i++) {
        if (String.valueOf(cl_chars[i]).matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音
          hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0];
        } else {// 如果字符不是中文,则不转换
          hanyupinyin += cl_chars[i];
        }
      }
    } catch (BadHanyuPinyinOutputFormatCombination e) {
      System.out.println("字符不能转成汉语拼音");
    }
    return hanyupinyin;
  }
}
